
#include "mytest_api.h"
#include "mytest_log.h"

using namespace std;

void prepare_printf()
{
    cout << "|-- <><><><><><><><><><><><><><><><><><><><><><><><><><> --|" << endl;
    cout << "|-- |*.*.*|       TEST      TEST      TEST       |*.*.*| --|" << endl;
    cout << "|-- <><><><><><><><><><><><><><><><><><><><><><><><><><> --|" << endl;
    cout << "|-- |*.*.*| Test_unzip            :  < z >       |*.*.*| --|" << endl;
    cout << "|-- |*.*.*| Test_allapps_from_afm :  < a >       |*.*.*| --|" << endl;
    cout << "|-- |*.*.*| Test_json_c           :  < j >       |*.*.*| --|" << endl;
    cout << "|-- |*.*.*| Test_thread_loop      :  < t >       |*.*.*| --|" << endl;
    cout << "|-- |*.*.*| Test_game             :  < g >       |*.*.*| --|" << endl;
    cout << "|-- <><><><><><><><><><><><><><><><><><><><><><><><><><> --|" << endl;
    cout << "|__________________________________________________________|" << endl;
}

///<><><><><><><><><><><><><><><><><><><><><><><><><><><>///
#include "test_unzip.h"
static void Test_unzip()
{
    string zipsrc("/home/gaoyuekang/gaoyuekang/idl-ota.zip");
    unzip_zip(zipsrc, "/home/gaoyuekang");
    std::vector<StAppInfo> vct;
    SearchQNXDir("/home/gaoyuekang/dir_test/", vct);
    for (auto vec : vct) {
        vec.st_print();
    }
}

///<><><><><><><><><><><><><><><><><><><><><><><><><><><>///
static const std::vector<_tstring>  g_vctItems = {
    "IVI_HMI",
    "alexa-hmi",
    "sdl-hmi",
    "sdl_navi_player"
};
static void Test_allapps_from_afm()
{
    std::vector<StAppInfo> all_apps_from_afm;
    std::vector<StAppInfo> vctxx;
    GetVector(vctxx);

    for (auto vec : vctxx) {

        auto it = std::find_if(g_vctItems.begin(), g_vctItems.end(), [&](_tcstring & name)
        {
            return name == vec.strName;
        });

        if (it != g_vctItems.end()) {
            all_apps_from_afm.push_back(vec);
        }
        else {
            continue;
        }
    }

    for (auto vec : all_apps_from_afm) {
        vec.st_print();
    }
}

///<><><><><><><><><><><><><><><><><><><><><><><><><><><>///
#include "test_json_c.h"
static void Test_json_c()
{
    std::vector<StAppInfo> vct;

    for (int i = 0; i <3 ;++i) {
        StAppInfo st;
        st.strName ="name[i]";
        st.strVersion = "0.1";
        st.strReadme = "nothing";
        vct.push_back(st);
    }

    on_notify_check_result(vct);
    on_notify_update_result("OTA_A", true);
    on_notify_download_result("OTA_B", false);
    on_notify_check_error("Check failed!~");
    on_notify_update_error("Update failed!~");
    on_notify_end();

    StUpdateInfo st;
    st.stSys.strVersion = "20190426-daily";
    st.stSys.strSN = "123456789";
    GetVector(st.vctApps);

    _tstring str;
    make_urlpost_Json(st, str);
    LOG_DEBUG("the result json-str is : %s", str.c_str());

    parse_afmresp_Json(str, st.vctApps);

    _tstring arrstr("{ \"added\": \"IVI_HMI@0.3\"}");
    parse_installresp_json(arrstr, str);

    arrstr = "[{ \"name\": \"IVI_HMI\",\"version\": \"0.3\",\"url\": \"apps/ivi_hmi.wgt\",\"MD5\": \"3a1sd2a3sd4f5as6dsadf1\",\"readme\": \"7897987987asdasdfas7d9\"}]";
    parse_webresp_json(arrstr, st.vctApps);

    st.st_print();
}

///<><><><><><><><><><><><><><><><><><><><><><><><><><><>///
#include "test_threadloop.h"
static void Test_thread_loop()
{
    CThreadLoop::Instance().do_check();
}

///<><><><><><><><><><><><><><><><><><><><><><><><><><><>///
/// \todo  Add others
static void* loop_game(void *unuse)
{
    while (true) {
        sleep(1);
        printf("~\n");
        printf("   ~\n");
        printf("       ~\n");
        printf("           ~\n");
        printf("               ~\n");
        printf("              \\\\\n");
        printf("               ||\n");
        printf("               ||\n");
        printf("|======================\\\n");
        printf("|-------==========------\\\n");
        printf("|-------|         \\-----\\\n");
        printf("|-------|          \\-----\\\n");
        printf("|-------|           \\-----\\\n");
        printf("|-------|            |-----------\\\n");
        printf("|-------===============------------\\\n");
        printf("|--------------------------------/\n");
        printf("|------------------------------/\n");
        printf("|=============================|\n");
    }
}
static void Test_game()
{
    pthread_t id;
    int ret = pthread_create(&id, NULL, loop_game, NULL);
    if (ret != 0) {
        LOG_DEBUG("<>.<>.<> pthread_create failed !~ <>.<>.<>\n");
    }
}


_tstring get_download_url(_tcstring &dst, const char* cmd, const char *text = "")
{
    _tstring url = "";
    if (url.empty()) {
        url = JOTA_CURL_HTTP_PORT;
    }


    static const int BUF_LEN = 1024*20;
    char buffer[BUF_LEN + 1];
    memset(buffer, '\0', sizeof(buffer));

    LOG_DEBUG("sizeof [%d] buffer [%s]", sizeof(buffer), buffer);

    char ccmd[64];
    sprintf(ccmd, "afm-util %s %s", cmd, text);
    LOG_DEBUG("%s", ccmd);

    return url + JOTA_CURL_DLWD_KEY + dst;

}

int main()
{
    prepare_printf();
    while (char c = getchar()) {
        if (c == 'q') {
            break;
        }
        else if (c == 'h') {
            prepare_printf();
        }
        else if (c == 'z') {
            Test_unzip();
        }
        else if (c == 'a') {
            Test_allapps_from_afm();
        }
        else if (c == 'j') {
            Test_json_c();
        }
        else if (c == 't') {
            Test_thread_loop();
        }
        else if (c == 'g') {
            Test_game();
        }
        else if (c == 'b') {
            LOG_DEBUG("%s", get_download_url("apps/xxx.wgt", "install", "aaa.wgt").c_str());
        }
    }

    return 0;
}


